import ExchangeSort.QuickSort;
import InsertSort.DirectInsertSort;
import InsertSort.ShellSort;
import SelectSort.HeapSort;
import SelectSort.SelectionSort;

import java.util.Arrays;
import java.util.Random;

public class TestSort {

    //直接插入排序的 耗时测试用例
    public static void insertSortTest(int[] arr) {
        arr = Arrays.copyOf(arr, arr.length);// 这样的操作不会影响初始数据
        long startTime = System.currentTimeMillis();
        DirectInsertSort.insertSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("直接插入排序耗费的时间: " + (endTime - startTime));
    }

    //希尔排序的 耗时测试用例
    public static void shellSortTest(int[] arr) {
        arr = Arrays.copyOf(arr, arr.length);// 这样的操作不会影响初始数据
        long startTime = System.currentTimeMillis();
        ShellSort.shellSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("希尔排序耗费的时间: " + (endTime - startTime));
    }

    //选择排序的 耗时测试用例
    public static void selectSortTest(int[] arr) {
        arr = Arrays.copyOf(arr, arr.length);// 这样的操作不会影响初始数据
        long startTime = System.currentTimeMillis();
        SelectionSort.selectSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("选择排序耗费的时间: " + (endTime - startTime));
    }

    //堆排序的 耗时测试用例
    public static void heapSortTest(int[] arr) {
        arr = Arrays.copyOf(arr, arr.length);// 这样的操作不会影响初始数据
        long startTime = System.currentTimeMillis();
        HeapSort.heapSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("堆排序耗费的时间: " + (endTime - startTime));
    }

    //快速排序的 耗时测试用例
    public static void quickSortTest(int[] arr) {
        arr = Arrays.copyOf(arr, arr.length);// 这样的操作不会影响初始数据
        long startTime = System.currentTimeMillis();
        QuickSort.quickSort(arr);
        long endTime = System.currentTimeMillis();
        System.out.println("快速排序耗费的时间: " + (endTime - startTime));
    }



    public static void orderArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i;
            //arr[i] = arr.length-i;
        }
    }

    //数组中的值 乱序
    public static void notOrderArray(int[] arr) {
        Random random = new Random();
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(100000);
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[100_000_000];
        //notOrderArray(arr);
        orderArray(arr);
        //insertSortTest(arr);
        shellSortTest(arr);
        //selectSortTest(arr);
        heapSortTest(arr);
        quickSortTest(arr);

    }
}
